:art: Update remark/last_submit_at

huangqimin001 3 gadi atpakaļ
vecāks
revīzija
7d504e84fb
5 mainītis faili ar 137 papildinājumiem un 92 dzēšanām
  1. 92 82
      api/eqpt_views.py
  2. 4 5
      api/point_views.py
  3. 2 2
      equipment/admin.py
  4. 29 0
      equipment/migrations/0012_auto_20210817_1727.py
  5. 10 3
      equipment/models.py

+ 92 - 82
api/eqpt_views.py

@@ -4,7 +4,6 @@ from __future__ import division
4 4
 
5 5
 import json
6 6
 
7
-import requests
8 7
 from django.conf import settings
9 8
 from django.db.models import Q
10 9
 from django_logit import logit
@@ -15,7 +14,6 @@ from TimeConvert import TimeConvert as tc
15 14
 
16 15
 from equipment.models import (IsolationPointInfo, IsolationPointUserInfo, ThermometerEquipmentInfo,
17 16
                               ThermometerMeasureInfo, ThermometerMeasureLogInfo)
18
-from utils.age import stamp2age
19 17
 from utils.error.errno_utils import IsolationPointStatusCode, ThermometerEquipmentStatusCode
20 18
 from utils.redis.rscreen import get_screen_info, set_screen_info
21 19
 from utils.redis.rtemperature import get_old_temperature, set_old_temperature
@@ -30,46 +28,46 @@ def eqpt_bind(request):
30 28
 
31 29
     macidsns = macidsns or [{'macid': macid, 'sn': sn}]
32 30
 
33
-    headers = {
34
-        'Content-Type': 'application/json',
35
-        'Partner-Identifier': 'yingduo',
36
-        'Partner-Token': '9A79C0E34C72B4D0F9B5EA0C59FFC52A',
37
-    }
31
+    # headers = {
32
+    #     'Content-Type': 'application/json',
33
+    #     'Partner-Identifier': 'yingduo',
34
+    #     'Partner-Token': '9A79C0E34C72B4D0F9B5EA0C59FFC52A',
35
+    # }
38 36
 
39 37
     for macidsn in macidsns:
40 38
         macid, sn = macidsn.get('macid'), macidsn.get('sn')
41 39
 
42
-        data = {
43
-            'mac': macid,
44
-            'callback': 'http://twjc.kodo.com.cn/api/upload/temperature',
45
-        }
46
-        # 设备注册成功
47
-        # {
48
-        #     "ret": "SUCCESS",
49
-        #     "data": {
50
-        #         "id": 6,
51
-        #         "callback": "http://twjc.kodo.com.cn/api/upload/temperature",
52
-        #         "mac": "C4:64:E3:7A:EF:A8"
53
-        #     },
54
-        #     "debug": ""
55
-        # }
56
-        #
57
-        # 设备注册失败
58
-        # {
59
-        #     "ret": "FAIL",
60
-        #     "data": "该设备已被注册!",
61
-        #     "debug": ""
40
+        # data = {
41
+        #     'mac': macid,
42
+        #     'callback': 'http://twjc.kodo.com.cn/api/upload/temperature',
62 43
         # }
63
-        try:
64
-            result = requests.post('http://www.protontek.com/vcare-api/open/device/register', headers=headers, data=json.dumps(data)).json()
65
-        except Exception as e:
66
-            result = {'message': e.args}
44
+        # # 设备注册成功
45
+        # # {
46
+        # #     "ret": "SUCCESS",
47
+        # #     "data": {
48
+        # #         "id": 6,
49
+        # #         "callback": "http://twjc.kodo.com.cn/api/upload/temperature",
50
+        # #         "mac": "C4:64:E3:7A:EF:A8"
51
+        # #     },
52
+        # #     "debug": ""
53
+        # # }
54
+        # #
55
+        # # 设备注册失败
56
+        # # {
57
+        # #     "ret": "FAIL",
58
+        # #     "data": "该设备已被注册!",
59
+        # #     "debug": ""
60
+        # # }
61
+        # try:
62
+        #     result = requests.post('http://www.protontek.com/vcare-api/open/device/register', headers=headers, data=json.dumps(data)).json()
63
+        # except Exception as e:
64
+        #     result = {'message': e.args}
67 65
 
68 66
         ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={
69 67
             'point_id': point_id,
70 68
             'sn': sn,
71
-            'eqpt_register_status': int(result.get('ret') == 'SUCCESS' or result.get('data') == '该设备已被注册!'),
72
-            'eqpt_register_result': result,
69
+            # 'eqpt_register_status': int(result.get('ret') == 'SUCCESS' or result.get('data') == '该设备已被注册!'),
70
+            # 'eqpt_register_result': result,
73 71
         })
74 72
 
75 73
     return response()
@@ -120,7 +118,8 @@ def eqpt_remark(request):
120 118
     except IsolationPointUserInfo.DoesNotExist:
121 119
         ipui = None
122 120
     if ipui:
123
-        ipui.remark += [remark]
121
+        ipui.remark = remark
122
+        ipui.remarks += [remark]
124 123
         ipui.save()
125 124
 
126 125
     return response()
@@ -222,10 +221,16 @@ def get_screen_data(point=None, point_id=None):
222 221
     temperature_logs = {log.get('macid'): log.get('temperature') for log in logs}
223 222
     time_logs = {log.get('macid'): tc.local_string(utc_dt=log.get('updated_at'), format='%m-%d %H:%M') for log in logs}
224 223
 
225
-    ipuis = IsolationPointUserInfo.objects.filter(point_id=point.point_id, status=True).values('pk', 'fields', 'observed_days')
226
-    # ipuis = {info.get('pk'): {'fields': info.get('fields'), 'observed_days': info.get('observed_days')} for info in ipuis}
227
-    ipuis_fields = {info.get('pk'): info.get('fields') for info in ipuis}
228
-    ipuis_observed_days = {info.get('pk'): info.get('observed_days') for info in ipuis}
224
+    ipuis = IsolationPointUserInfo.objects.filter(point_id=point.point_id, status=True)
225
+    ipuis = [ipui.data for ipui in ipuis]
226
+    # ipuis_fields = {info.get('pk'): info.get('fields') for info in ipuis}
227
+    # ipuis_observed_days = {info.get('pk'): info.get('observed_days') for info in ipuis}
228
+    ipuis = {ipui.get('pk'): {
229
+        'fields': ipui.get('fields'),
230
+        'observed_days': ipui.get('observed_days'),
231
+        'last_submit_at': ipui.get('last_submit_at'),
232
+        'remark': ipui.get('remark'),
233
+    } for ipui in ipuis}
229 234
 
230 235
     total_active_eqpt_num = eqpts.count()
231 236
     has_upload_temperature_num = len(temperature_logs)
@@ -234,8 +239,12 @@ def get_screen_data(point=None, point_id=None):
234 239
     eqpts = [{**eqpt.screen_data, **{
235 240
         'has_upload': eqpt.macid in temperature_logs,
236 241
         'temperature': temperature_logs.get(eqpt.macid, 0),
237
-        'observed_days': ipuis_observed_days.get(eqpt.ipui_pk, 0),
238
-    }, **{field.get('key', ''): field.get('value', '') for field in ipuis_fields.get(eqpt.ipui_pk, {})}} for eqpt in eqpts]
242
+        'observed_days': ipuis.get(eqpt.ipui_pk, {}).get('observed_days', 0),
243
+        'last_submit_at': ipuis.get(eqpt.ipui_pk, {}).get('last_submit_at', ''),
244
+        'remark': ipuis.get(eqpt.ipui_pk, {}).get('remark', ''),
245
+    }, **{
246
+        field.get('key', ''): field.get('value', '') for field in ipuis.get(eqpt.ipui_pk, {}).get('fields', [])
247
+    }} for eqpt in eqpts]
239 248
     reminds = [{
240 249
         'name': eqpt.get('name'),
241 250
         'room': eqpt.get('room'),
@@ -297,48 +306,48 @@ def screen_eqpt_result(request):
297 306
 
298 307
 @logit
299 308
 def upload_temperature(request):
300
-    request.POST = request.POST or json.loads(request.body)
301
-    macid = request.POST.get('mac', '')
302
-    name = request.POST.get('name', '')
303
-    sex = request.POST.get('gender', 0)
304
-    birth_stamp = request.POST.get('birthday', 0)
305
-    age = request.POST.get('age', 0)
306
-    phone = request.POST.get('mobile', '')
307
-    start_stamp = request.POST.get('startTime', 0)
308
-    end_stamp = request.POST.get('endTime', 0)
309
-    temperature = round(float(request.POST.get('maxTempValue', 0)), 2)
310
-
311
-    try:
312
-        eqpt = ThermometerEquipmentInfo.objects.get(macid=macid, status=True)
313
-    except ThermometerEquipmentInfo.DoesNotExist:
314
-        ThermometerMeasureLogInfo.objects.create(macid=macid, name=name, sex=sex, birth_stamp=birth_stamp, phone=phone, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, upload_temperature_info=request.POST, status=False)
315
-        return response(ThermometerEquipmentStatusCode.THERMOMETER_EQUIPMENT_NOT_FOUND)
316
-
317
-    try:
318
-        point = IsolationPointInfo.objects.get(point_id=eqpt.point_id, status=True)
319
-    except IsolationPointInfo.DoesNotExist:
320
-        return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND)
321
-
322
-    point_measure_ymd = tc.local_string(format='%Y-%m-%d')
323
-    point_measure_window = point.current_measure_window
324
-
325
-    eqpt.name = name
326
-    eqpt.sex = sex
327
-    eqpt.birth_stamp = birth_stamp
328
-    eqpt.age = stamp2age(birth_stamp)
329
-    eqpt.phone = phone
330
-    eqpt.last_submit_at = tc.utc_datetime()
331
-    eqpt.save()
332
-
333
-    ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, name=name, sex=sex, birth_stamp=birth_stamp, phone=phone, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, upload_temperature_info=request.POST)
334
-
335
-    if point_measure_window:
336
-        measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={
337
-            'temperature': temperature,
338
-        })
339
-        if temperature > measure_info.temperature:
340
-            measure_info.temperature = temperature
341
-            measure_info.save()
309
+    # request.POST = request.POST or json.loads(request.body)
310
+    # macid = request.POST.get('mac', '')
311
+    # name = request.POST.get('name', '')
312
+    # sex = request.POST.get('gender', 0)
313
+    # birth_stamp = request.POST.get('birthday', 0)
314
+    # age = request.POST.get('age', 0)
315
+    # phone = request.POST.get('mobile', '')
316
+    # start_stamp = request.POST.get('startTime', 0)
317
+    # end_stamp = request.POST.get('endTime', 0)
318
+    # temperature = round(float(request.POST.get('maxTempValue', 0)), 2)
319
+    #
320
+    # try:
321
+    #     eqpt = ThermometerEquipmentInfo.objects.get(macid=macid, status=True)
322
+    # except ThermometerEquipmentInfo.DoesNotExist:
323
+    #     ThermometerMeasureLogInfo.objects.create(macid=macid, name=name, sex=sex, birth_stamp=birth_stamp, phone=phone, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, upload_temperature_info=request.POST, status=False)
324
+    #     return response(ThermometerEquipmentStatusCode.THERMOMETER_EQUIPMENT_NOT_FOUND)
325
+    #
326
+    # try:
327
+    #     point = IsolationPointInfo.objects.get(point_id=eqpt.point_id, status=True)
328
+    # except IsolationPointInfo.DoesNotExist:
329
+    #     return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND)
330
+    #
331
+    # point_measure_ymd = tc.local_string(format='%Y-%m-%d')
332
+    # point_measure_window = point.current_measure_window
333
+    #
334
+    # eqpt.name = name
335
+    # eqpt.sex = sex
336
+    # eqpt.birth_stamp = birth_stamp
337
+    # eqpt.age = stamp2age(birth_stamp)
338
+    # eqpt.phone = phone
339
+    # eqpt.last_submit_at = tc.utc_datetime()
340
+    # eqpt.save()
341
+    #
342
+    # ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, name=name, sex=sex, birth_stamp=birth_stamp, phone=phone, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, upload_temperature_info=request.POST)
343
+    #
344
+    # if point_measure_window:
345
+    #     measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={
346
+    #         'temperature': temperature,
347
+    #     })
348
+    #     if temperature > measure_info.temperature:
349
+    #         measure_info.temperature = temperature
350
+    #         measure_info.save()
342 351
 
343 352
     return response()
344 353
 
@@ -416,6 +425,7 @@ def mqtt_upload_temperature(payload):
416 425
         if ipui:
417 426
             ipui.observed_ymds = list(set(ipui.observed_ymds + [point_measure_ymd]))
418 427
             ipui.observed_days = len(ipui.observed_ymds)
428
+            ipui.last_submit_at = tc.utc_datetime()
419 429
             ipui.save()
420 430
 
421 431
     set_screen_info(point.point_id, get_screen_data(point))

+ 4 - 5
api/point_views.py

@@ -57,8 +57,8 @@ def get_point_info(request):
57 57
 
58 58
 @logit
59 59
 def get_point_fields(request):
60
-    user_id = request.POST.get('user_id', '')
61 60
     point_id = request.POST.get('point_id', '')
61
+    user_id = request.POST.get('user_id', '')
62 62
 
63 63
     try:
64 64
         point = IsolationPointInfo.objects.get(point_id=point_id, status=True)
@@ -66,15 +66,14 @@ def get_point_fields(request):
66 66
         return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND)
67 67
 
68 68
     try:
69
-        user_info = IsolationPointUserInfo.objects.get(user_id=user_id, point_id=point_id, status=True)
70
-        user_info = user_info.fields
69
+        ipui = IsolationPointUserInfo.objects.get(user_id=user_id, point_id=point_id, status=True)
71 70
     except IsolationPointUserInfo.DoesNotExist:
72
-        user_info = []
71
+        ipui = None
73 72
 
74 73
     return response(data={
75 74
         'point_name': point.point_name,
76 75
         'fields': point.point_fields,
77
-        'user_info': user_info,
76
+        'user_info': ipui.fields if ipui else [],
78 77
     })
79 78
 
80 79
 

+ 2 - 2
equipment/admin.py

@@ -16,11 +16,11 @@ class IsolationPointInfoAdmin(admin.ModelAdmin):
16 16
 
17 17
 
18 18
 class IsolationPointUserInfoAdmin(admin.ModelAdmin):
19
-    list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'leave_at', 'status', 'updated_at', 'created_at')
19
+    list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'last_submit_at', 'leave_at', 'status', 'updated_at', 'created_at')
20 20
 
21 21
 
22 22
 class ThermometerEquipmentInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
23
-    list_display = ('eqpt_id', 'point_id', 'macid', 'sn', 'active_status', 'active_at', 'ipui_pk', 'name', 'sex', 'birth_stamp', 'age', 'phone', 'remark', 'last_submit_at', 'eqpt_register_status', 'eqpt_register_result', 'status', 'updated_at', 'created_at')
23
+    list_display = ('eqpt_id', 'point_id', 'macid', 'sn', 'active_status', 'active_at', 'ipui_pk', 'name', 'sex', 'birth_stamp', 'age', 'phone', 'status', 'updated_at', 'created_at')
24 24
     list_filter = ('point_id', 'status')
25 25
 
26 26
 

+ 29 - 0
equipment/migrations/0012_auto_20210817_1727.py

@@ -0,0 +1,29 @@
1
+# Generated by Django 3.2.6 on 2021-08-17 09:27
2
+
3
+from django.db import migrations, models
4
+import jsonfield.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('equipment', '0011_isolationpointuserinfo_observed_ymds'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='isolationpointuserinfo',
16
+            name='last_submit_at',
17
+            field=models.DateTimeField(blank=True, help_text='上一次上报时间', null=True, verbose_name='last_submit_at'),
18
+        ),
19
+        migrations.AddField(
20
+            model_name='isolationpointuserinfo',
21
+            name='remarks',
22
+            field=jsonfield.fields.JSONField(blank=True, default=[], help_text='备注', null=True, verbose_name='remarks'),
23
+        ),
24
+        migrations.AlterField(
25
+            model_name='isolationpointuserinfo',
26
+            name='remark',
27
+            field=models.CharField(blank=True, help_text='备注', max_length=255, null=True, verbose_name='remark'),
28
+        ),
29
+    ]

+ 10 - 3
equipment/models.py

@@ -144,9 +144,12 @@ class IsolationPointUserInfo(BaseModelMixin):
144 144
 
145 145
     observed_ymds = JSONField(_('observed_ymds'), default=[], blank=True, null=True, help_text='已测温日期')
146 146
     observed_days = models.IntegerField(_('observed_days'), default=0, help_text='已测温天数')
147
+
148
+    last_submit_at = models.DateTimeField(_('last_submit_at'), blank=True, null=True, help_text='上一次上报时间')
147 149
     leave_at = models.DateTimeField(_('leave_at'), blank=True, null=True, help_text='离开时间')
148 150
 
149
-    remark = JSONField(_('remark'), default=[], blank=True, null=True, help_text='备注')
151
+    remark = models.CharField(_('remark'), max_length=255, blank=True, null=True, help_text='备注')
152
+    remarks = JSONField(_('remarks'), default=[], blank=True, null=True, help_text='备注')
150 153
 
151 154
     class Meta:
152 155
         verbose_name = _('隔离点用户录入信息')
@@ -162,9 +165,13 @@ class IsolationPointUserInfo(BaseModelMixin):
162 165
     @property
163 166
     def data(self):
164 167
         return {
168
+            'pk': self.pk,
165 169
             'point_id': self.point_id,
166 170
             'user_id': self.user_id,
167 171
             'fields': self.fields,
172
+            'observed_days': self.observed_days,
173
+            'last_submit_at': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '',
174
+            'remark': self.remark,
168 175
         }
169 176
 
170 177
 
@@ -241,7 +248,7 @@ class ThermometerEquipmentInfo(BaseModelMixin):
241 248
             'age': self.age or '',
242 249
             'phone': self.phone or '',
243 250
             'remark': self.remark or '',
244
-            'last_submit_at': tc.local_string(utc_dt=self.last_submit_at),
251
+            'last_submit_at': tc.local_string(utc_dt=self.last_submit_at) if self.last_submit_at else '',
245 252
             'eqpt_register_status': self.eqpt_register_status,
246 253
             'eqpt_register_status_str': dict(self.REGISTER_STATUE_TUPLE).get(self.eqpt_register_status, ''),
247 254
             'eqpt_register_result': self.eqpt_register_result,
@@ -254,7 +261,7 @@ class ThermometerEquipmentInfo(BaseModelMixin):
254 261
             'point_id': self.point_id,
255 262
             'macid': self.macid,
256 263
             'remark': self.remark,
257
-            'last_submit_at': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M'),
264
+            'last_submit_at': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '',
258 265
         }
259 266
 
260 267